

import UIKit

import YYModel

import AFNetworking

import SVProgressHUD

 //微博提示标示符id

private let weiBoTip = "weiBoTip"

//微博cell重用标识符
private let cellID = "weiboCell"

class HomeViewController: RootViewController {
    
   

    override func viewDidLoad() {
        //调用刷新控件
        setupControl()  //先把子类的属性设置完成在调用父类
        
        //调用rootViewCONTROLLER 的viewDidLoad 函数 会直接调用 laodData
        super.viewDidLoad()
        
       
         /// 准备表格视图
            prepareTableView()
       
        
        
        //设置访客视图 如果用户登录成功 则访客视图为nil
        
        vistorView?.setup(titletext: "关注一些人，回这里看看有什么惊喜")
        
        //注册网络连接监听
        
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "reachabilityChanged", name: AFNetworkingReachabilityDidChangeNotification, object: nil)

        //注册选择照片通知
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "selectPictureSee:", name: XLSelectPictureNotication, object: nil)
        
        
    
    }
     /// 准备表格视图
    private func prepareTableView(){
        
        //注册可重要cell
        tableView?.registerClass(StatusCell.self, forCellReuseIdentifier: cellID)
        //注册提示可重要cell
        
        tableView?.registerClass(StatusTipCell.self, forCellReuseIdentifier: weiBoTip)
        //设置行高属性
        
        tableView?.estimatedRowHeight = 200
        
        tableView?.rowHeight = UITableViewAutomaticDimension
        
        tableView?.separatorStyle = .None
        
    }
    
    deinit{
        
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
        //在ios6.0之后，默认不再清除view ，zai  ios6之前 收到内存警告后 如果视图当前没有显示 会被从内存中销毁 下次需要使用的时候 会再次调用 loadview 创建view
        //ios6之后字需要释放能够被再次创建的资源，例如 ：  从网络加载的数据数组
        //图像的内存管理 SDwebimage 自信管理 会释放内存中的图像，下次使用，会从磁盘缓存加载 如果磁盘缓存没有 下载图片
        
        //如果视图当前正在显示，window 不为nil
        //注意 swift 中lazy 的属性 不要设置为nil
        if self.view.window == nil{
            
            //清理数组
            
            self.statusViewModel.cleanup()
           //刷新数据
            
            self.loadData()
            
            
        }
        
        
        
    }
    
    @objc private func reachabilityChanged(){
        
       // print("网络连接变化\(NetworkTools.sharedTools.reachable)")
        
        self.tableView?.reloadSections(NSIndexSet(index: 0), withRowAnimation: .Automatic)
    }
    
    /// 选择照片跳转的方法
   @objc private func selectPictureSee(infouse: NSNotification){
        print(infouse)
    
    guard let selecedIndex = infouse.userInfo?[XLPictureSelectKey] as? Int else{
        
         return
    }
    
    guard let usls = infouse.userInfo?[XLPictureUrlKey] as? [String] else{
        
        return
    }
    
    
    
     let  vc = PhotoBrowseController(selectIndex: selecedIndex, urls: usls)
    //modal的自定义样式
    vc.modalPresentationStyle = .Custom
    
     presentViewController(vc, animated: true, completion: nil)
    
    }
    
    override func loadData() {
        
        
        
        
        //判断是否上拉刷新，如果上拉刷新动画开启，认为是上拉刷
        let   isPullup = refreshControl.isPullupRefresh

                //刷新显示控件
         refreshControl.beginRefreshing()
        
        
        
        
     statusViewModel.loadStatusList(isPullup) { (isSuccessed) -> () in
        
           print("加载数据")
        
             self.refreshControl.endRefreshing()
        
        if !isSuccessed{
            
            SVProgressHUD.showErrorWithStatus("网络加载失败")
        
            
            return
            
        }
        
        self.tableView?.reloadData()
        
        
        }

}
    
   ///私有属性 微博视图模型
    private lazy  var statusViewModel = StatusListViewModel()
    
    


    
    

}
// MARK: - UITableviewDataSource
//如果父类遵守了协议 ，子类就不用遵守， 否则会报错
extension HomeViewController {
    
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        
        return 2
    }
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        //如果没有网才返回一个
        if section == 0 {
            
            return NetworkTools.sharedTools.reachable ? 0 : 1
        }
        
        return statusViewModel.statusList.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        if indexPath.section == 0 {
            
            return tableView.dequeueReusableCellWithIdentifier(weiBoTip, forIndexPath: indexPath)
        }
        
        
        let cell = tableView.dequeueReusableCellWithIdentifier(cellID, forIndexPath: indexPath) as! StatusCell
        
        
        cell.viewModel = statusViewModel.statusList[indexPath.row]
        
       
        return cell
        
    }
    
    
}
